package com.pe.pgn.clubpgn.dao.impl;

import java.util.Calendar;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.hibernate.Criteria;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.stereotype.Repository;

import com.pe.pgn.clubpgn.common.CLPConstantes;
import com.pe.pgn.clubpgn.dao.MensajeDao;
import com.pe.pgn.clubpgn.dao.hibernate.GenericDaoHibernate;
import com.pe.pgn.clubpgn.domain.ClpmMensaje;

@Repository("mensajeDao")
public class MensajeDaoImpl extends GenericDaoHibernate<ClpmMensaje, Long> implements
		MensajeDao {

	public MensajeDaoImpl() {
		super(ClpmMensaje.class);
	}

	@SuppressWarnings("unchecked")
	public List<ClpmMensaje> buscarMensajes(String deMensaje, String stMensaje) {
		
		Criteria criteria = DetachedCriteria.forClass(ClpmMensaje.class)
				.getExecutableCriteria(getSessionFactory().getCurrentSession());

		if(StringUtils.isNotBlank(stMensaje) 
				&& !stMensaje.equalsIgnoreCase(CLPConstantes.CARACTER_GUION_NO_ESPACIOS)){
			
			criteria.add(Restrictions.eq("stMensaje", stMensaje.equalsIgnoreCase(CLPConstantes.ST_VERDADERO) ? 
				Boolean.TRUE : Boolean.FALSE));
		}
		
		if(StringUtils.isNotBlank(deMensaje) ){
			
			criteria.add(Restrictions.like("deMensaje", "%".concat(deMensaje.toLowerCase()).concat("%")).ignoreCase());
		}
				
		List<ClpmMensaje> lista = criteria.list(); 
		return lista;
	}
	
	@SuppressWarnings("unchecked")
	public List<ClpmMensaje> obtenerListaMensajes(){
		
		Criteria criteria = DetachedCriteria.forClass(ClpmMensaje.class)
							.getExecutableCriteria(getSessionFactory().getCurrentSession());
		
		criteria.setMaxResults(CLPConstantes.MAXIMO_RESULTADO_INICIAL);
		criteria.add(Restrictions.eq("stMensaje", Boolean.TRUE));
		criteria.addOrder(Order.desc("id"));
		
		List<ClpmMensaje> lista = criteria.list(); 
		return lista;
	}
	
	public void  guardarMensaje(ClpmMensaje mensaje){
		
		if(mensaje.getId() == null){
			
			mensaje.setCoUsuarioCreador(getUsuarioLogueado().getUsername());
			mensaje.setDaFechaCreacion(Calendar.getInstance());
		}
		else{
			mensaje.setCoUsuarioModificador(getUsuarioLogueado().getUsername());
			mensaje.setDaFechaModificacion(Calendar.getInstance());
		}
		save(mensaje);
		getHibernateTemplate().flush();
	}
	
	public ClpmMensaje obtenerMensaje(Long id){
		
		ClpmMensaje mensaje = get(id);
		return mensaje;
	}
	
	public void eliminarMensaje(Long id) {
		
       remove(id);
       getHibernateTemplate().flush();
        
	}

}
